﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "GcmpModelInterface.h"
#include "INoElementIdDbObject.h"
#include "NdbObjectSchematic.h"
#include "DbDataSchema.h"


namespace gcmp {

    class IElementDeletionContext;

    /// \brief 对象的删除行为的接口。
    class GCMP_MODEL_INTERFACE_EXPORT IElementDeletionComponent : public INoElementIdDbObject
    {
        DEFINE_CAST_DERIVED(gcmp::IElementDeletionComponent, gcmp::INoElementIdDbObject);
    public:
        /// \brief 生成空的删除行为。
        ///
        /// CanBeDeleted方法将返回Element的ElementStatus中的属性。
        /// \param pElement 接口所属的对象
        /// \return 返回一个接口的指针。
        static OwnerPtr<IElementDeletionComponent> CreateNullDeletionComponent();

        /// \brief 生成默认的删除行为。
        ///
        /// CanBeDeleted方法将根据Element中ElementStatus中的对应属性及Cells做'&&'判断。
        /// \param pElement 接口所属的对象
        /// \return 返回一个接口的指针。
        static OwnerPtr<IElementDeletionComponent> CreateNoWarningsComponent();

        /// \brief 对象是不是可删除。
        /// \param pDeleteContext 删除的上下文。
        /// \param explanation 不可删除时，可以返回原因。
        /// \return 对象可以删除时，返回true；否则返回false。
        virtual bool CanBeDeleted(const IElementDeletionContext* pDeleteContext, std::wstring* explanation) const = 0;

        /// \brief 获取对象删除时的警告信息。
        /// \param warnings 删除对象的警告信息。
        /// \return 成功获取删除对象的警告信息，返回true；否则返回false。
        virtual bool GetDeletionWarning(std::vector<std::wstring>& warnings) const = 0;

     };

}// namespace gcmp


